<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    // let obj = {
    //   a: 3,
    //   b: 4,
    //   c: {
    //     x: 10,
    //     y: 20
    //   },
    //   fn: function() {},
    //   d: undefined
    // }
    // let obj2 = obj;
    // obj2.a = 30;
    // console.log(obj);
    // console.log(obj2);


    // 浅拷贝
    // 1. 可以用展开运算符
    // let obj2 = {...obj};
    // obj2.a = 30;
    // console.log(obj);
    // console.log(obj2);

    // 2. 使用Object.assign()方法，类似于数组的concat方法
    // let obj2 = Object.assign({}, obj);
    // obj2.c.x = 300;
    // console.log(obj);
    // console.log(obj2);


    // 深拷贝
    // 递归的浅拷贝
    // 原对象有函数或者undefined的时候，会有问题
    // let obj2 = JSON.parse(JSON.stringify(obj));
    // obj2.c.x = 300;
    // console.log(obj);
    // console.log(obj2);

    




    // 数组
    // 浅拷贝
    // const arr2 = [...arr];
    // const arr2 = [].concat(arr);

    // 深拷贝
    // const arr2 = JSON.parse(JSON.stringify(arr));
  </script>
</body>
</html>